﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Radiation___IM;
using Radiation.Common.Communication;

namespace RadiationUI.Forms
{
    public partial class UserLogin : Form
    {
        public UserLogin()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void label1_Click(object sender, EventArgs e)
        {
            // To remove
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Connexion request

            if (nickBox.Text.Length <= 1 || passBox.Text.Length == 0 || passBox.Text.Contains(' ') || nickBox.Text.Contains(']')
                || nickBox.Text.Contains('[') || nickBox.Text.Contains(';') || nickBox.Text.Contains(' '))
            {
                MessageBox.Show("La valeur que vous avez entrée n'est pas valide (soit le mot de passe, soit le pseudo), car leur longeur est inférieure au minimum , ou parceque qu'ils contiennent des caractères illégaux ( [];espace pour le pseudo, et les espaces pour le mot de passe )", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            Connection.sendToAPI(Radiation.Common.Communication.APIMethods.LOGIN + " " + nickBox.Text + " " + passBox.Text);

            button1.Text = "Attente ...";
            button1.Enabled = false;

            // Wait for an api responce
            MessageParser parser = AsyncAPI.Instance.waitSignal(20);

            if (parser != null)
            {
                if (parser.Message != Constants.LOGIN_SUCESS)
                {
                    switch (parser.Message)
                    {
                        case Constants.LOGIN_BAD_NICKNAME:
                            MessageBox.Show("Votre compte n'existe pas.", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            break;
                        case Constants.LOGIN_BAD_PASSWORD:
                            MessageBox.Show("Votre mot de passe n'est pas bon.", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            break;
                        case Constants.LOGIN_ERROR:
                            MessageBox.Show("Une erreur est survenue lors de la procédure de connexion.", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            break;
                        case Constants.NOT_ALLOWED:
                            MessageBox.Show("Vous n'êtes pas autorisés à faire cela", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            break;
                        default:
                            MessageBox.Show("Une erreur inconnue est survenue (parser.Message=" + parser.Message + ")", "Attention", MessageBoxButtons.OK);
                            break;
                    }
                }
                else
                {
                    this.Close();
                }
            }
            else
            {
                // timeout ... (parser == null : timeout)
                MessageBox.Show("Délai d'attente dépassé (20s)", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            button1.Enabled = true;
            button1.Text = "Se connecter";
        }

        private void UserLogin_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (nickBox.Focused)
                    passBox.Focus();
                else if (passBox.Focused)
                    button1_Click(this, null);
            }
            else if (e.KeyCode == Keys.Escape)
                this.Close();
        }

        private void UserLogin_Load(object sender, EventArgs e)
        {
            nickBox.Focus();
        }
    }
}
